package main

import (
	"fmt"
	"jvm/nzpJvm/classpath"
	"jvm/nzpJvm/runtime_area/heap"
	"strings"
)

func main() {
	// 解析命令行参数
	cmd := parseCmd()
	// 命令行存在version参数，例如 java -version
	if cmd.versionFlag {
		fmt.Println("version 0.0.1")
	} else if cmd.helpFlag || cmd.class == "" {
		// help参数。打印-help参数的输出
		printUsage()
	} else {
		// 启动JVM
		startJVM(cmd)
	}
}
func startJVM(cmd *Cmd) {
	// 返回一个ClassPath的指针，这个结构体中包含了从启动类路径，扩展类路径，以及用户类路径下查找class文件的操作
	classPaths := classpath.Parse(cmd.XjreOption, cmd.cpOption)

	classLoader := heap.NewClassLoader(classPaths)

	className := strings.Replace(cmd.class, ".", "/", -1)
	mainClass := classLoader.LoadClass(className)
	mainMethod := mainClass.GetMainMethod()

	if mainMethod != nil {
		interpret(mainMethod, cmd.args)
	}else {
		panic("类["+cmd.class+"]不存在public static void main(String[])方法")
	}
}




